package ao2udpdemo;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;


public class ReceiveMessageDemo2 {
    public static void main(String[] args) throws IOException {
        //组播


        //1. 创建接收端对象
        //细节： 在接受数据的时候，一定要绑定端口，否则数据无法接受
        //而且绑定的端口，一定要与发送的端口一致
        //	创建数据报套接字并将其绑定到本机地址上的任何可用端口
        MulticastSocket ms = new MulticastSocket(10086);
        //2. 加入组播组并且绑定端口 将当前本机，添加到224.0.0.1的这一组当中
        InetAddress address = InetAddress.getByName("224.0.0.1");
        ms.joinGroup(address);


        //3.接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        //4.接受数据
        ms.receive(dp);
        //5.解析数据包
        byte[] data = dp.getData();
        int len = dp.getLength();
        String ip = dp.getAddress().getHostAddress();
        String name = dp.getAddress().getHostName();
        int port = dp.getPort();
        System.out.println("接收到数据：" + new String(data, 0, len));
        System.out.println("ip为：" + ip + "这台电脑名为" + name + "," + port + "这个端口发出的");

        //释放资源
        ms.close();
    }
}
